2023/12/231593字符

包装类 & 类数组

var num = 123;  // 原始值数字
var objNum = new Number(123);  // 对象数字(可加属性和方法)
objNum * 2;  // 运算后又转换为原始值数字

undefined、null等原始值不可以有属性和方法

包装类

var num = 4;
num.len = 3;
// new Number(4).len = 3;  -->  delete
// new Number(4).len
console.log(num.len);  //--> undefined

var str = "abcd";
str.length = 2;
// new String("abcd").length = 2;  -->  delete
// new String("abcd").length
console.log(str, str.length);  //--> "abcd" 4

var str = "abc";
str += 1;
var test = typeof(str);  // test == "string";
if (test.length == 6) {
    test.sign = "typeof 的返回结果可能为 String";
    // new String(test).sign = "typeof的返回结果可能为String";  --> delete
}
// new String(test).sign
console.log(test.sign);  //--> undefined

类数组

var obj = {
    "0" : 'a',
    "1" : 'b',
    "2" : 'c',
    "length" : 3,
    "push" : Array.prototype.push,
    "splice" : Array.prototype.splice
}

属性要为索引(数字)属性,必须有 length 属性,最好加上 push

阿里面试题

var obj = {
    "2" : "a",
    "3" : "b",
    "length" : 2,
    "push" : Array.prototype.push
}
obj.push('c');  // 第一遍执行会覆盖 obj[obj.length]
obj.push('d');
console.log(obj);  //--> {2: "c", 3: "d", length: 4, push: ƒ}

push 原理

Array.prototype.push = function (target) {
    obj[obj.length] = target;
    obj.length ++;
}